Перейти к основному содержимому

5.10. Встроенные функции в Go

Разработчику Архитектору

Встроенные функции в Go

Go предоставляет ограниченный набор встроенных функций, которые доступны без импорта пакетов. Эти функции являются частью языка и работают на уровне компилятора.

Встроенные функции

ФункцияЗначениеПример
appendДобавляет элементы в срез и возвращает новый срезslice = append(slice, 42)
capВозвращает вместимость среза, массива, канала или строкиc := cap(slice)
closeЗакрывает канал, сигнализируя об окончании передачи данныхclose(ch)
complexСоздаёт комплексное число из действительной и мнимой частейz := complex(3.0, 4.0)
copyКопирует элементы из одного среза в другой, возвращает количество скопированных элементовn := copy(dst, src)
deleteУдаляет элемент из карты по указанному ключуdelete(m, key)
imagВозвращает мнимую часть комплексного числаim := imag(z)
lenВозвращает длину среза, массива, строки, карты или каналаl := len(slice)
makeСоздаёт срез, карту или канал с заданной начальной ёмкостьюm := make(map[string]int)
newВыделяет память для типа и возвращает указатель на нулевое значениеp := new(int)
panicВызывает панику, немедленно останавливая нормальное выполнениеpanic("critical error")
printВыводит аргументы в стандартный вывод без форматированияprint("debug")
printlnВыводит аргументы в стандартный вывод с завершающим переводом строкиprintln(x, y)
realВозвращает действительную часть комплексного числаre := real(z)
recoverВосстанавливает выполнение после паники внутри отложенной функцииif r := recover(); r != nil { /* обработка */ }

Ключевые слова языка

Ключевое словоЗначениеПример
breakПрерывает выполнение цикла или оператора switchfor { if cond { break } }
caseОпределяет ветку в операторах switch или selectswitch x { case 1: /* ... */ }
chanОбъявляет тип канала для горутинной коммуникацииch := make(chan int)
constОбъявляет константу с неизменяемым значениемconst pi = 3.14159
continueПропускает текущую итерацию циклаfor i := 0; i < 10; i++ { if i%2 == 0 { continue } }
defaultОпределяет ветку по умолчанию в switch или selectselect { case v := <-ch: /* ... */; default: /* ... */ }
deferОткладывает выполнение функции до выхода из текущей функцииdefer file.Close()
elseОпределяет альтернативную ветку в условном оператореif x > 0 { /* ... */ } else { /* ... */ }
fallthroughПередаёт управление следующей ветке в switchswitch x { case 1: fallthrough; case 2: /* ... */ }
forОбъявляет цикл или диапазонную итерациюfor i := 0; i < n; i++ { /* ... */ }
funcОбъявляет функцию или методfunc add(a, b int) int { return a + b }
goЗапускает функцию как горутинуgo process(data)
gotoПереходит к метке в текущей функцииgoto label; /* ... */ label:
ifОбъявляет условный операторif x > 0 { /* ... */ }
importИмпортирует пакет в текущий файлimport "fmt"
interfaceОбъявляет интерфейсный типtype Reader interface { Read(p []byte) (n int, err error) }
mapОбъявляет тип карты (ассоциативного массива)m := map[string]int{"a": 1}
packageОбъявляет имя пакета в файлеpackage main
rangeИтерирует по элементам массива, среза, строки, карты или каналаfor k, v := range m { /* ... */ }
returnВозвращает значение из функции и завершает её выполнениеreturn result
selectВыбирает один из нескольких операций с каналамиselect { case v := <-ch: /* ... */; case ch <- x: /* ... */ }
structОбъявляет составной тип с именованными полямиtype Point struct { X, Y int }
switchВыбирает одну из нескольких веток выполненияswitch x { case 1: /* ... */; case 2: /* ... */ }
typeОбъявляет новый тип на основе существующегоtype Celsius float64
varОбъявляет переменнуюvar x int = 42

Встроенные типы

ТипЗначениеПример
boolЛогический тип со значениями true и falsevar active bool = true
stringНеизменяемая последовательность байтов в кодировке UTF-8s := "hello"
intЦелое число, размер зависит от платформы (32 или 64 бита)var count int = 100
int8Целое число со знаком размером 8 битvar small int8 = -128
int16Целое число со знаком размером 16 битvar medium int16 = 32767
int32Целое число со знаком размером 32 битаvar large int32 = 2147483647
int64Целое число со знаком размером 64 битаvar huge int64 = 9223372036854775807
uintЦелое число без знака, размер зависит от платформыvar index uint = 42
uint8Целое число без знака размером 8 битvar byteValue uint8 = 255
uint16Целое число без знака размером 16 битvar word uint16 = 65535
uint32Целое число без знака размером 32 битаvar dword uint32 = 4294967295
uint64Целое число без знака размером 64 битаvar qword uint64 = 18446744073709551615
uintptrЦелое число без знака для хранения адреса памятиvar addr uintptr = 0x7fff5fbff8f8
byteПсевдоним для uint8, используется для байтовых данныхvar b byte = 'A'
runeПсевдоним для int32, представляет кодовую точку Unicodevar r rune = 'я'
float32Число с плавающей точкой одинарной точностиvar f32 float32 = 3.14
float64Число с плавающей точкой двойной точностиvar f64 float64 = 3.1415926535
complex64Комплексное число с компонентами float32var c64 complex64 = 1 + 2i
complex128Комплексное число с компонентами float64var c128 complex128 = 1.0 + 2.0i

Примечание: функции array(), empty(), exit() и die() не существуют во встроенном пространстве имён языка Go. Для завершения программы используется функция os.Exit() из стандартной библиотеки. Проверка на пустоту контейнеров выполняется через сравнение длины с нулём: len(slice) == 0.